package com.yiyi.controller;

import com.yiyi.entity.StudentLongyiyi;
import com.yiyi.form.SearchStudentForm;
import com.yiyi.service.StudentService;
import com.yiyi.vo.ResultVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 学生信息控制类
 *
 * @author yiyi
 * @date 2021/6/23
 *
 * 1、分页展示及搜索
 * 2、新增学生
 * 3、删除学生
 * 4、修改学生信息
 * 5、查看学生详情
 */
@RestController
@RequestMapping("/students")
@Api(tags = {"学生信息操作接口"})
public class StudentController {

    @Autowired
    private StudentService studentService;

    /**
     * 分页展示及搜索。
     * 分页元素不可为空；
     * 任意搜索元素可为空或非空。支持学号和性别精准查询、姓名和班级模糊查询。
     *
     * @param form
     * @return
     * */
    @PostMapping("/findByPage")
    @ApiOperation(value = "分页及搜索查询")
    public ResultVO findByPage(@RequestBody SearchStudentForm form) {
        return ResultVO.ok(studentService.findByPage(form));
    }

    /**
     * 插入新对象
     *
     * @param student
     * @return
     * */
    @PostMapping("/insert")
    @ApiOperation(value = "插入新对象")
    public ResultVO insert(@RequestBody StudentLongyiyi student) {
        return studentService.saveOne(student) ? ResultVO.create() : ResultVO.fail();
    }

    /**
     * 根据id删除对象
     *
     * @param id
     * @return
     * */
    @DeleteMapping("/delete/{id}")
    @ApiOperation(value = "根据id删除对象")
    public ResultVO delete(@PathVariable("id") Integer id) {
        studentService.deleteOne(id);
        return ResultVO.delete();
    }

    /**
     * 更新学生信息
     *
     * @param student
     * @return
     * */
    @PutMapping("/update")
    @ApiOperation(value = "更新学生信息")
    public ResultVO update(@RequestBody StudentLongyiyi student) {
        return studentService.saveOne(student) ? ResultVO.ok() : ResultVO.fail();
    }

    /**
     * 根据学号获取学生详细信息
     *
     * @param id
     * @return
     * */
    @GetMapping("/getDetail/{id}")
    @ApiOperation(value = "根据学号获取学生详细信息")
    public ResultVO getDetail(@PathVariable("id") Integer id) {
        return ResultVO.ok(studentService.findById(id));
    }
}